/**
 * File: Arc.java
 * Created by: mhaimel
 * Created on: Mar 5, 2010
 * CVS:  $Id: Arc.java 1.0 Mar 5, 2010 1:27:11 PM mhaimel Exp $
 */
package uk.ac.ebi.curtain.model.graph;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;

/**
 * @author mhaimel
 *
 */
public interface Arc<N,A> {

	Long getId();
	
	void setValue(A value);
	
	/**
	 * @return the left
	 */
	Node<N, A> getLeft();
	
	NodeEdge onLeftNode();
	
	NodeEdge onRightNode();
	
	AtomicInteger getStatus();
	
	void setStatus(Integer status);
	
	void detachFromNodes();

	/**
	 * @return the right
	 */
	Node<N, A> getRight();

	A getValue();
	
	AtomicReference<A> getAtomicValue();
	
	NodeEdge onOtherNode(Node<N, A> node);
	
	NodeEdge onNode(Node<N, A> node);
	
	Node<N, A> getOtherNode(Node<N, A> node);
	
}
